package mall

import (
	"e_mall_server/models"
	"e_mall_server/service"
	"github.com/gin-gonic/gin"
	"go.uber.org/zap"
	"strconv"
)

/**
 * @Author: zhaobin
 * @Description TODO
 * @Date: 2022-05-20 11:46
 */

// AddOrder 创建订单，返回订单id
func AddOrder(c *gin.Context) {
	createOrderParam := models.CreateOrderParam{}
	if err := c.ShouldBind(&createOrderParam); err != nil {
		zap.L().Error("CreateOrder with invalid param", zap.Error(err))
		ResponseError(c, "请求参数错误")
		return
	}
	// 业务逻辑处理
	orderId, err := service.AddOrder(c, &createOrderParam)
	if err != nil {
		zap.L().Error("service.AddOrder(&Order) failed", zap.Error(err))
		ResponseError(c, "增加订单失败 请重试")
		return
	}
	// 创建成功返回响应
	ResponseSuccess(c, map[string]string{"order_id": orderId})
}

// GetOrderList 通过用户id获取订单列表接口
func GetOrderList(c *gin.Context) {
	userId, err := strconv.ParseInt(c.Param("userId"), 10, 64)
	if err != nil {
		zap.L().Error("service.GetOrderList() failed", zap.Error(err))
		ResponseError(c, "查询订单列表失败")
		return
	}
	// 业务逻辑处理
	orderList, err := service.GetOrderListByUserId(userId)
	if err != nil {
		zap.L().Error("service.GetOrderListByUserId(userId) failed", zap.Error(err))
		ResponseError(c, "获取订单列表失败 请重试")
		return
	}
	// 创建成功返回响应
	ResponseSuccess(c, orderList)
}

// UpdateOrder 修改订单信息接口
func UpdateOrder(c *gin.Context) {
	Order := models.Order{}
	if err := c.ShouldBind(&Order); err != nil {
		zap.L().Error("UpdateOrder with invalid param", zap.Error(err))
		ResponseError(c, "请求参数错误")
		return
	}
	zap.L().Debug("Order数据", zap.Any("value", Order))
	// 业务逻辑处理
	if count := service.UpdateOrder(&Order); count > 0 {
		// 创建成功返回响应
		ResponseSuccess(c, nil)
		return
	}
	ResponseError(c, "修改订单失败 请重试")
}

// DeleteOrder 删除订单接口
func DeleteOrder(c *gin.Context) {
	id, err := strconv.ParseInt(c.Param("id"), 10, 64)
	if err != nil {
		zap.L().Error("DeleteOrder with invalid param", zap.Error(err))
		ResponseError(c, "传入参数错误")
		return
	}
	count := service.DeleteOrderById(id)
	if count > 0 {
		ResponseSuccess(c, nil)
		return
	}
	ResponseError(c, "删除订单失败")
}

// GetOrderByOrderId 通过订单id查询订单信息
func GetOrderByOrderId(c *gin.Context) {
	orderId := c.Param("orderId")
	Order, err := service.GetOrderByOrderId(orderId)
	if err != nil {
		zap.L().Error("service.GetOrderDetailById(id) failed", zap.Error(err))
		ResponseError(c, "获取管理员信息错误")
		return
	}
	ResponseSuccess(c, Order)
}
